import java.util.Random;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //break 跳出循环
        //continue 跳出本次循环 进行下一次循环
        //for循环
        //for(表达式1;表达式2;表达式3;) {   表达式4;}
        //循环顺序 1 2 4 3  2 4 3 2 4 3...
        //f8 逐语句 f7 逐过程
        //求n!
//        int n=5;
//        int ret=1;
//        for (int i = 1; i <= n; i++) {
//            ret *= i;
//        }
//        System.out.println(ret);
        //求1！+ 2！+ n!
//        int sum = 0;
//        for(int n = 1;n <= 5;n++ ) {//累加5次
//            int ret = 1;//每次阶乘值
//            for (int j = 1; j <= n; j++) {//阶乘n次
//                ret *= j;
//            }
//            sum += ret;
//        }
//        System.out.println(sum);

        //do{}while循环 ：do{循环语句}while(循环条件) 至少循环一次 满足条件继续运行 不满足跳出

        // 输出
//        System.out.println("打印且换行");
//        System.out.print("打印不换行");
//        System.out.printf("%s","格式化打印");
        //输入
//        Scanner sc = new Scanner(System.in);
//        System.out.println("请输入你的姓名：");
//        //String name = sc.nextLine();//接收整行
//        String name = sc.next();//接收整行 遇到空格结束
//        System.out.println(name);
//        System.out.println("请输入你的年龄：");
//        int age = sc.nextInt();
//        System.out.println(age);
//        System.out.println("请输入你的体重：");
//        float weight = sc.nextFloat();
//        System.out.println(weight);
        //循环输入 ctrl + d 停止循环
//        Scanner sc = new Scanner(System.in);
//        int num = 0;
//        int sum = 0;
//        while(sc.hasNextInt()) {//判断是否为int
//            num = sc.nextInt();//接收
//            sum += num;//求和
//        }
//        System.out.println(sum);

        //猜数字小游戏
//        Scanner scanner = new Scanner(System.in);
//        Random random = new Random();
//        int randNum = random.nextInt(100);//[1,100)
//        while(true) {
//            int num = scanner.nextInt();
//            if(num > randNum) {
//                System.out.println("猜大了");
//            }else if(num < randNum) {
//                System.out.println("猜小了");
//            }else {
//                System.out.println("猜对了");
//                break;
//            }
//    }
        //根据年龄打印年龄段
//        Scanner scanner = new Scanner(System.in);
//        int age = scanner.nextInt();
//        if(age <= 18) {
//            System.out.println("少年");
//        }else if(age >= 19 && age <= 28) {
//            System.out.println("青年");
//        }else if(age >= 29 && age <= 55) {
//            System.out.println("中年");
//        } else if (age > 56) {
//            System.out.println("老年");
//        }
        //输出乘法口诀表
//        for(int i = 1;i <= 9;i++) {
//            for(int j = 1;j <= i;j++) {
//                System.out.print(j + "*" + i + "=" + i*j + " ");
//            }
//            System.out.println();
//        }

        //求两个正整数的最大公因数 辗转相除法
//        Scanner scanner = new Scanner(System.in);
//        int a = scanner.nextInt();
//        int b = scanner.nextInt();
//        int  c = a % b;
//        while(c != 0) {
//            a = b;
//            b = c;
//            c = a % b;
//        }
//        System.out.println(b);

        //水仙花数1-99999  1 49
//        for (int i = 1; i <99999 ; i++) {
//            int tmp = i;
//            int count = 1;
//            int sum = 0;
//            while(tmp / 10 != 0) {//判断位数
//                count++;
//                tmp /= 10;
//            }
//            tmp = i;//二次赋值 第一次tmp已经改变
//            while(tmp != 0) {//求值
//                sum += Math.pow(tmp % 10,count);
//                tmp /= 10;
//            }
//            if(sum == i) {
//                System.out.println(i);
//            }
//        }

        //写一个函数返回参数中的二进制1的个数 & n-1 & 32
//        int n = 7;
//        int count = 0;
//        while(n != 0) {//循环条件
//                count++;//个数加加
//                n = n & (n-1);//n接收&之后的值
//        }
//        System.out.println(count);
//遍历32位 &1 为1 count++
//        int n = -1;
//        int count = 0;
//        for (int i = 0; i < 32; i++) {//0-32
//            if(((n >> i) & 1) != 0) {//相同++ 不同进入下一循环
//                count++;
//            }
//        }
//        System.out.println(count);
        // 与 第二种方法的好处在于 不用循环32次 当n为0 时就会停止循环
//        int n = -1;
//        int count = 0;
//        while(n != 0) {
//            if(((n & 1) !=0)) {
//                count++;
//            }
//            n = n >>> 1;
//        }
//        System.out.println(count);
        //获取一个数二进制序列中的奇数列 偶数列 分别输出二进制序列
//        int n = 7;
//        System.out.print("奇数列 ");
//        for (int i = 0; i < 31 ; i+=2) {//奇数列
//            System.out.print((1 & n >> i) + " ");//& 1相同为1 不同为0
//        }
//        for (int i = 30; i >= 0 ; i -= 2) {
//            System.out.print((1 & n >> i) + " ");
//        }
//        System.out.println();
//        System.out.print("偶数列 ");
//        for (int i = 1; i < 32; i+=2) {//偶数列
//            System.out.print((1 & n >> i) + " ");//
//        }
//        for (int i = 31; i >= 1 ; i -= 2) {
//            System.out.print((1 & n >> i) + " ");
//        }
//        int sum = factSum(5);
//        System.out.println(sum);

    }
    //方法
    //当前方法前加 public static 返回类型 方法名( 小驼峰命名 首单词小写 后单词首字母大写) (形式参数列表)
    //{方法体};
    //不允许嵌套
    //可定义在类里面任意位置
    //方法中 return 代表结束 方法后面代码不再执行
    //使用方法判断闰年
//    public static boolean isLeapYear(int year) {
//        if(year % 4 ==0 && year % 100 != 0 || year % 400 == 0) {
//            return true;
//        }else {
//            return false;
//        }
    //  }
//    public static void add(int a,int b) {
//        System.out.println(a + b);
//    }

    //引用方法注意事项
    //1.参数列表个数
    //2.参数列表类型
    //3.参数列表顺序
    //4.方法返回值
    //方法实现 1! + 2! + n!...
//    public static  int fact(int n) {//求阶乘
//        int ret = 1;
//        for (int i = 1; i <= n; i++) {
//            ret *= i;
//        }
//        return ret;
//    }
//    //求阶乘和
//    public  static int factSum(int n) {
//        int sum = 0;
//        for (int i = 1; i <= n ; i++) {
//            sum += fact(i);
//        }
//        return sum;
//    }
    //方法重载：可以使用一个方法名进行求多个不同值
    //1.方法名相同
    //2.形式参数列表不同(参数个数不同 数据类型不同 参数顺序不同)
    //3.返回值不影响函数重载
    //方法签名方法重载本质原因是方法签名不同
    //方法全路径名+参数列表+返回值类型，构成方法完整的名字
}
